<?php

class ExportsController extends Zend_Controller_Action
{

    public function init()
    {                
        $path = APPLICATION_PATH.'/../../Classes';
        $load = Zend_Loader::loadFile('PHPExcel.php', $path);
    }

    public function indexAction()
    {
        // action body
    }

    public function exportcandidatesAction()
    {                       
        $isRefer = $this->getRequest()->getParam('isrefer') == 'true';
        $model = new Model_Reservacandidatos();
        $alldata = $model->getCandidates($isRefer);
        $data = $alldata['data'];
        
        if(is_array($data) && count($data) > 0){
            
            //se instancia un objeto de excel
            $objPHPExcel = new PHPExcel();
            //Configuración de la metadata
            $objPHPExcel->getProperties()->setCreator("Heinsohn Business Technology");
            $objPHPExcel->getProperties()->setLastModifiedBy("HUMAN+");
            $objPHPExcel->getProperties()->setTitle("Base de Candidatos");
            $objPHPExcel->getProperties()->setSubject("Reporte de Candidatos");
            $objPHPExcel->getProperties()->setDescription("Listado de candidatos que han participado en procesos de selección en Heinsohn");
            $objPHPExcel->getProperties()->setKeywords("candidatos base seleccion");
            $objPHPExcel->getProperties()->setCategory("Gestión Humana");
            
            $colExport = array(
                'NOMPROYECTO' => 'Proyecto',
                'NOMCARGO' => 'Cargo',
                'NOMFOCOTECNICO' => 'Foco técnico',
                'NOMBRE' => 'Candidato',
                'NUM_ID' => 'Cédula',
                'REFERIDO_POR' => 'Referido Por',
                'CEDULA_REFIERE' => 'Cedula de quien refiere',
                'TELEFONO' => 'Teléfono',
                'EMAIL' => 'E-mail',
                'APROBO_TECNICA' => 'Aprobó prueba técnica',
                'FECHA_TECNICA' => 'Fecha prueba técnica',
                'OBSERVACIONES_ENTREVISTA' => 'Observaciones de la entrevista'
            );
            
            $nrow = 1;
            $ncol = 1;
            
            foreach($colExport as $k => $v){
                $sCol = getColXls($ncol).$nrow;                
                $objPHPExcel->getActiveSheet()->setCellValue($sCol, $v);
                $ncol++;
            }
            
            $ncol = 1;
            $nrow++;
            foreach($data as $row){
                $clearData = array_intersect_key($row, $colExport);               
                
                foreach($clearData as $k => $v){
                    $sCol = getColXls($ncol).$nrow;
                    $objPHPExcel->getActiveSheet()->setCellValue($sCol, $v);
                    $ncol++;
                }
                $ncol = 1;
                $nrow++;
            }            
            
            $hStyle = $this->headerStyle();
            
            $cIni = getColXls(1).'1';
            $cEnd = getColXls(count($colExport)).'1';
            
            $objPHPExcel->getActiveSheet()->setSharedStyle($hStyle, $cIni.":".$cEnd);
            
            $this->download($objPHPExcel, 'Candidatos');
        }
    }
    private function download($objPHPExcel, $name = 'Informe'){
        $date = getCurrentHbtTime();            
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'.$name.$date.'.xlsx"');
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save('php://output');
        exit;
    }
    private function headerStyle(){
        $headStyle = new PHPExcel_Style();
        $headStyle->applyFromArray(
                        array('font'=>array('color'=>array('argb' => 'FFFFFFFF')),
                              'fill'=>array('type' => PHPExcel_Style_Fill::FILL_SOLID,
                                            'color'=>array('argb' => 'FF000066')),
                              'borders' => array('bottom'=>array('style' => PHPExcel_Style_Border::BORDER_THIN),
                                                 'right'=>array('style' => PHPExcel_Style_Border::BORDER_THIN))
                        ));
        return $headStyle;
    }
    
    public function requeststatusxlsAction() {
        $dbeg = $this->getRequest()->getParam('dbeg');
        $dend = $this->getRequest()->getParam('dend');
        
        $model = new Model_Reports();
        
        /**
         * Obtener la información del reporte como se muestra por pantalla
         */
        $tmp = $model->getRequestsReport($dbeg, $dend, 0, 0);
        $report = $tmp['data'];
        /**
         * Obtener la información del estado de los grupos de cada uno de los
         * registros del reporte (solicitudes)
         */
        $groups = $model->getRequestStatusGroups($dbeg, $dend);
        
        /**
         * Obtener número de grupo mas grande
         */
        $maxGrp = $model->getRequestMaxGroup($dbeg, $dend);
        /**
         * Organizar la información en un arreglo para recorrerla adecuadamente
         * por cada uno de los registros del reporte
         */
        $gData = array();
        foreach($groups as $row){
            $gData[$row['NUM_SOLICITUD']][$row['NUM_GRUPO']] = $row;
        }
        
        /**
         * Crear objeto de tipo excel para descargar
         */
        $objPHPExcel = new PHPExcel();
            //Configuración de la metadata
        $objPHPExcel->getProperties()->setCreator("Heinsohn Business Technology");
        $objPHPExcel->getProperties()->setLastModifiedBy("HUMAN+");
        $objPHPExcel->getProperties()->setTitle("Reporte de Solicitudes");
        $objPHPExcel->getProperties()->setSubject("Reporte de Candidatos");
        $objPHPExcel->getProperties()->setDescription("Reporte periodico de solicitudes");
        $objPHPExcel->getProperties()->setKeywords("solicitudes");
        $objPHPExcel->getProperties()->setCategory("Gestión Humana");
        
        /**
         * Obtener cabeceras del reporte
         */
        $headers = $this->getRequestReportHeader();                        
        
        /**
         * Punto de inicio del reporte
         */
        $rowIni = 1;
        $colIni = 1;
        /**
         * Inicializacion de apuntadores
         */
        $nRow = $rowIni;
        $nCol = $colIni;
        
        /**
         * Cabecera del reporte
         */
        foreach($headers as $h){
            $sCol = getColXls($nCol).$nRow;  
            $objPHPExcel->getActiveSheet()->setCellValue($sCol, $h);
            $nCol++;
        }
        /**
         * Cabeceras grupo
         */
        for($i = 1; $i <= $maxGrp; $i++){
            $sCol = getColXls($nCol).$nRow;  
            $objPHPExcel->getActiveSheet()->setCellValue($sCol, 'GRUPO '.$i);
            $nCol++;
        }
        
        /**
         * Columnas ocultas
         */
        $hidden = $this->getRequestHiddenColumnReport();
        
        $nCol = $colIni;
        $nRow++;
        
        
        foreach($report as $sol){                        
            /**
             * Datos del reporte
             */
            foreach($sol as $k => $v){
                if(!in_array($k, $hidden)){
                    $sCol = getColXls($nCol).$nRow;  
                    $objPHPExcel->getActiveSheet()->setCellValue($sCol, $v);
                    $nCol++;
                }
            }
            /**
             * Datos de los grupos
             */
            for($j = 1; $j <= $maxGrp; $j++){
                $sCol = getColXls($nCol).$nRow;
                $objPHPExcel->getActiveSheet()->setCellValue($sCol, $gData[$sol['NUM_SOLICITUD']][$j]['TAS_TITLE']);
                $nCol++;
            }
            
            $nRow++;
            $nCol = $colIni;
        }                        
        
        
        $hStyle = $this->headerStyle();
            
        $cIni = getColXls($colIni).$rowIni;
        $cEnd = getColXls(count($headers) + $maxGrp).$rowIni;

        $objPHPExcel->getActiveSheet()->setSharedStyle($hStyle, $cIni.":".$cEnd);

        $this->download($objPHPExcel, 'Solicitudes');
        
    }
    private function getRequestReportHeader(){
        $headers[] = 'SOLICITUD #';
        $headers[] = 'FECHA SOLICITUD';
        $headers[] = 'PROYECTO';
        $headers[] = 'FECHA APROBACIÓN';
        $headers[] = 'VACANTES';
        $headers[] = 'NÚMERO DE VACANTES';
        $headers[] = 'PRESUPUESTO';
        $headers[] = 'TIPO CONTRATO';
        $headers[] = 'EVALUADOS';
        $headers[] = 'PRESTENTÓ PT';
        $headers[] = 'PASÓ PT';
        $headers[] = 'PENDIENTES PT';
        $headers[] = 'CONTRATADOS';
        $headers[] = 'VACANTES PENDIENTES';
        
        return $headers;
    }
    private function getRequestHiddenColumnReport(){
        $hidden[] = 'IDPROYECTO';
        $hidden[] = 'IDTIPOCONTRATO';
        $hidden[] = 'IDCARGO';
        return $hidden;
    }


}



